/******************************************************************************
 * Copyright (C) 2019 ShenZhen ComTop Information Technology Co.,Ltd
 * All Rights Reserved.
 * 本软件为深圳康拓普开发研制。未经本公司正式书面同意，其他任何个人、团体不得使用、
 * 复制、修改或发布本软件.
 *****************************************************************************/
package com.egaleye.core.response;

import org.springframework.http.HttpStatus;

import java.util.StringJoiner;

/**
 * 错误码
 *
 * @author tangkaijun
 * @version 2021/10/19
 * @since jdk1.8
 */
public enum CodeEnum {

	/** 正常-200 */
	SUCCESS(200, 1000, "处理成功"),

	/** 错误请求-400 */
	BAD_REQUEST(400, 1001, "{0}"),

	/** 未授权-401 */
	UNAUTHORIZED(401, 1002, "未授权"),

	/** 禁止访问-403 */
	FORBIDDEN(403, 1003, "禁止访问"),

	/** 资源不存在-404 */
	NOT_FOUND(404, 1004, "资源不存在"),

	/** 请求方法不支持-405 */
	METHOD_NOT_ALLOWED(405, 1005, "{0}请求方法不支持"),

	/** 请求超时-408 */
	REQUEST_TIMEOUT(408, 1006, "请求超时"),

	/** 资源冲突-409 */
	CONFLICT(409, 1007, "资源冲突"),

	/** 不支持的媒体类型-415 */
	UNSUPPORTED_MEDIA_TYPE(415, 1008, "不支持的媒体类型"),

	/** 服务器内部错误-500 */
	INTERNAL_SERVER_ERROR(500, 1009, "{0}"),

	/** 错误网关-502 */
	BAD_GATEWAY(502, 1010, "错误网关"),

	/** 服务不可用-503 */
	SERVICE_UNAVAILABLE(503, 1011, "服务不可用"),

	/** 网关超时-504 */
	GATEWAY_TIMEOUT(504, 1012, "网关超时"),

	/** 请求成功提示 */
	SUCCESS_INFO(200, 9995, "{0}"),

	/** 业务异常-200 */
	BUSINESS_ERROR(200, 1100, "{0}"),
	/** 项目版本删除异常 */
	DELETE_PROJECT_VERSION_ERROR(400, 230, "关联数据未清空"),

	/** 未知错误-500 */
	UNKNOWN_ERROR(500, 9999, "未知错误");

	/** 业务状态码 */
	private final int code;

	/** http状态码 */
	private final int httpStatus;

	/** 提示信息 */
	private final String message;

	/**
	 * 构造函数
	 *
	 * @param httpStatus http状态码
	 * @param code       业务状态码
	 * @param message    提示信息
	 */
	CodeEnum(int httpStatus, int code, String message) {
		this.httpStatus = httpStatus;
		this.code = code;
		this.message = message;
	}

	/**
	 * @return 获取 code属性值
	 */
	public int getCode() {
		return code;
	}

	/**
	 * @return 获取 message属性值
	 */
	public String getMessage() {
		return message;
	}

	/**
	 * 获取HTTP响应码
	 *
	 * @return 获取 httpStatus属性值
	 */
	public HttpStatus getHttpStatus() {
		return HttpStatus.valueOf(httpStatus);
	}

	@Override
	public String toString() {
		return new StringJoiner(", ", CodeEnum.class.getSimpleName() + "[", "]")
				.add("code=" + code)
				.add("httpStatus=" + httpStatus)
				.add("message='" + message + "'")
				.toString();
	}
}
